package com.ashlikun.pdfview


import android.graphics.Canvas
import android.util.Size
import android.view.MotionEvent
import com.ashlikun.pdfview.model.LinkTapEvent

/**
 * 实现此接口以从PDFView接收事件
 * 当加载完成时。
 */
typealias OnLoadCompleteListener = (nbPages: Int) -> Unit
/**
 * 初始呈现文档时要调用的回调对象
 */
typealias OnRenderListener = (nbPages: Int) -> Unit
/**
 * 发生文档加载错误时要调用的回调对象
 */
typealias OnErrorListener = (t: Throwable) -> Unit
typealias OnPageErrorListener = (page: Int, t: Throwable?) -> Unit

/**
 * 实现此接口以从PDFView接收事件
 * 通过滑动更改页面时
 */
typealias OnPageChangeListener = (page: Int, pageCount: Int) -> Unit
/**
 * 实现此接口以从PDFView接收事件
 * 滚动页面时
 * @param page current page index
 * @param positionOffset see [com.ashlikun.pdfview.PDFView.getPositionOffset]
 */
typealias OnPageScrollListener = (page: Int, positionOffset: Float) -> Unit

/**
 * 实现此接口以从PDFView接收事件
 * 长按视图时
 */
typealias OnLongPressListener = (e: MotionEvent) -> Unit
/**
 * 实现此接口以从PDFView接收事件
 * 当视图被触摸时
 */
typealias OnTapListener = (e: MotionEvent) -> Boolean

/**
 * 此接口允许外部类绘制
 * PDFView画布上的某些内容，尤其是图像。
 *   当PDFView为
 *      绘制视图。
 *     页面从（0,0）开始
 *
 * @param canvas        用来画东西的画布。
 * @param pageWidth     当前页面的宽度。
 * @param pageHeight    当前页面的高度。
 * @param displayedPage 当前页面索引
 */
typealias OnDrawListener = (canvas: Canvas?, pageWidth: Float, pageHeight: Float, displayedPage: Int) -> Unit
/**
 * 当用户点击链接时调用
 */
typealias OnLinkClick = (event: LinkTapEvent) -> Unit
typealias OnGetPageSize = (width: Int, height: Int) -> Size


public class Callbacks {
    /**
     * 加载PDF时要调用的回调对象
     */
    var onLoadComplete: OnLoadCompleteListener? = null

    /**
     * 发生文档加载错误时要调用的回调对象
     */
    var onError: OnErrorListener? = null

    /**
     * 发生页面加载错误时要调用的回调对象
     */
    var onPageError: OnPageErrorListener? = null

    /**
     * 初始呈现文档时要调用的回调对象
     */
    var onRender: OnRenderListener? = null

    /**
     * 页面更改时要调用的回调对象
     */
    var onPageChange: OnPageChangeListener? = null

    /**
     * 滚动页面时要调用的回调对象
     */
    var onPageScroll: OnPageScrollListener? = null

    /**
     * 绘制上述图层时要调用的回调对象
     * 当前页面
     */
    var onDraw: OnDrawListener? = null

    /**
     * 所有需要绘制的页面
     */
    var onDrawAll: OnDrawListener? = null

    /**
     * 当用户做出敲击手势时要调用的回调对象
     */
    var onTap: OnTapListener? = null

    /**
     * 当用户做长按手势时要调用的回调对象
     */
    var onLongPress: OnLongPressListener? = null

    /**
     * 单击链接时回调要调用的对象
     */
    var onLinkClick: OnLinkClick? = null
}